
package utils
{
	import flash.utils.Dictionary;
	
	public class HashMap
	{     
		private var _keys:Array = null;   
		private var props:Dictionary = null;   
		
		public function HashMap():void
		{   
			this.clear();   
		}   
		public function clear():void{   
			this.props = new Dictionary();   
			this._keys = new Array();   
		}   
		public function containsKey(key:Object):Boolean{   
			return this.props[key] != null;   
		}   
		public function containsValue(value:Object):Boolean{   
			var result:Boolean = false;   
			var len:uint = this.size();   
			if(len > 0){   
				for(var i:uint = 0 ; i < len ; i++){   
					if(this.props[this._keys[i]] == value){
						result=true;   
					}else{
						result=false; 
					}
				}   
			}else{
				result= false;   
			}
			return result;     
		}   
		public function get(key:Object):Object{   
			return this.props[key];   
		}   
		public function put(key:Object,value:Object):Object{   
			var result:Object = null;   
			if(this.containsKey(key)){   
				result = this.get(key);   
				this.props[key] = value;   
			}else{   
				this.props[key] = value;   
				this._keys.push(key);   
			}   
			return result;   
		}   
		public function remove(key:Object):Object{   
			var result:Object = null;   
			if(this.containsKey(key)){   
				delete this.props[key];   
				var index:int = this._keys.indexOf(key);   
				if(index > -1){   
					this._keys.splice(index,1);   
				}   
			}   
			return result;   
		}  
		public function removeAll():void
		{
			for(var i:int = 0; i != _keys.length; ++i)
			{
				delete this.props[_keys[i]];
			}		
			
			clear();
		}
		public function size():Number{      
			return this._keys.length;   
		}   
		public function isEmpty():Boolean{
			return this.size()<1;       
		}   
		public function values():Array{   
			var result:Array = new Array();   
			var len:Number = this.size();   
			if(len > 0){   
				for(var i:Number = 0;i<len;i++){   
					result.push(this.props[this._keys[i]]);   
				}   
			}       
			return result;   
		}   
		public function keys():Array{   
			return this._keys;   
		}  
		
	}
}